Recipes & ingredients
Ingredients and recipes are stored as JSON. The default files are:
Assets/Knoll_Core/CocktailSystem/IngredientData.jsonAssets/Knoll_Core/CocktailSystem/RecipeData.json
Display names can have Japanese and English. In-world text follows 表示言語/Language on SystemManager. Recipe matching uses id, not the display name.
Ingredient data
IngredientData.json is an array. Each ingredient looks like this:
{
"id": "gin",
"name": {
"jp": "ジン",
"en": "Gin"
},
"color": [225, 245, 254],
"hasBubbles": false
}
| Field | Meaning |
|---|---|
id | Ingredient ID in lowercase letters and _. Must exactly match recipe ingredient IDs and the match key |
name.jp | Japanese display name |
name.en | English display name |
color | Liquid color (RGB, 0–255) |
hasBubbles | Whether it is carbonated |
The pack includes these 15 ingredients.
| id | Japanese | English | Carbonated |
|---|---|---|---|
gin | ジン | Gin | No |
vodka | ウォッカ | Vodka | No |
white_rum | ホワイトラム | White Rum | No |
tequila | テキーラ | Tequila | No |
brandy | ブランデー | Brandy | No |
triple_sec | ホワイトキュラソー | Triple Sec | No |
blue_curacao | ブルーキュラソー | Blue Curacao | No |
peach | ピーチ | Peach | No |
lime_juice | ライムジュース | Lime Juice | No |
lemon_juice | レモンジュース | Lemon Juice | No |
orange_juice | オレンジジュース | Orange Juice | No |
grapefruit_juice | グレープフルーツジュース | Grapefruit Juice | No |
cranberry_juice | クランベリージュース | Cranberry Juice | No |
soda_water | ソーダ水 | Soda Water | Yes |
tonic_water | トニックウォーター | Tonic Water | Yes |
Changing liquid color or carbonation on a bottle Inspector also writes back to this JSON. id and name are not changed from the bottle.
To add an ingredient, append it to the JSON, duplicate an existing bottle, then pick that liquid name. Up to 4 liquids can be used at once.
Recipe data
RecipeData.json is an array. Each recipe looks like this:
{
"key": "orange_juice-vodka",
"name": {
"jp": "スクリュードライバー",
"en": "Screwdriver"
},
"ingredients": [
{"id": "vodka", "ratio": 1},
{"id": "orange_juice", "ratio": 3}
],
"color": [255, 180, 90],
"progress": 1.0,
"method": "build"
}
| Field | Meaning |
|---|---|
key | Match key. Sort the ingredient id values (Unicode order) and join them with - |
name.jp | Japanese cocktail name |
name.en | English cocktail name |
ingredients | Ingredient id values and ratios. IDs must exactly match the ingredient JSON |
color | Finished liquid color (RGB, 0–255) |
progress | Target mix amount. 1.0 is fully mixed |
method | build or shaker |
- Keep recipes to 4 ingredients or fewer.
keyis the sorted ingredientidvalues joined together, not the display names. Example: vodka and orange juice →orange_juice-vodka.- The order of
ingredientsdoes not have to matchkey. Onlykeyis sorted. idspelling, case, and_all count as different.- Do not delete the fallback recipe at the end of the array (
key:failed). Any unmatched mix becomes this result. - The tablet dropdown shows every recipe except that last fallback.
Included recipes
The default RecipeData.json has 45 cocktails plus one failed result.
| Cocktail | Method | Ingredients (ratio) |
|---|---|---|
| Screwdriver | Build | Vodka 1 / Orange Juice 3 |
| Bulldog | Build | Vodka 1 / Grapefruit Juice 3 |
| Vodka Tonic | Build | Vodka 1 / Tonic Water 3 |
| Vodka Soda | Build | Vodka 1 / Soda Water 3 |
| Cape Codder | Build | Vodka 1 / Cranberry Juice 3 |
| Vodka Gimlet | Shaker | Vodka 3 / Lime Juice 1 |
| Sea Breeze | Build | Vodka 1.5 / Grapefruit Juice 2 / Cranberry Juice 2 |
| Madras | Build | Vodka 1.5 / Orange Juice 2 / Cranberry Juice 2 |
| Blue Lagoon | Shaker | Vodka 2 / Blue Curacao 1 / Lemon Juice 1 |
| Kamikaze | Shaker | Vodka 2 / Triple Sec 1 / Lime Juice 1 |
| Balalaika | Shaker | Vodka 2 / Triple Sec 1 / Lemon Juice 1 |
| Cosmopolitan | Shaker | Vodka 2 / Triple Sec 1 / Cranberry Juice 2 / Lime Juice 1 |
| Sex on the Beach | Shaker | Vodka 1.5 / Peach 1 / Orange Juice 2 / Cranberry Juice 2 |
| Gin and Tonic | Build | Gin 1 / Tonic Water 3 |
| Orange Blossom | Build | Gin 1 / Orange Juice 3 |
| Gimlet | Shaker | Gin 3 / Lime Juice 1 |
| Gin Sour | Shaker | Gin 3 / Lemon Juice 1 |
| Gin Fizz | Shaker | Gin 1.5 / Lemon Juice 1 / Soda Water 3 |
| Gin Rickey | Build | Gin 1.5 / Lime Juice 1 / Soda Water 3 |
| White Lady | Shaker | Gin 2 / Triple Sec 1 / Lemon Juice 1 |
| Peach Fizz | Shaker | Gin 1 / Peach 1 / Lemon Juice 1 / Soda Water 3 |
| Rum and Orange | Build | White Rum 1 / Orange Juice 3 |
| Rum and Tonic | Build | White Rum 1 / Tonic Water 3 |
| Daiquiri | Shaker | White Rum 3 / Lime Juice 1 |
| Blue Hawaii | Shaker | White Rum 2 / Blue Curacao 1 / Orange Juice 2 / Lemon Juice 1 |
| XYZ | Shaker | White Rum 2 / Triple Sec 1 / Lemon Juice 1 |
| Peach Daiquiri | Shaker | White Rum 2 / Peach 1 / Lime Juice 1 |
| Tequila Tonic | Build | Tequila 1 / Tonic Water 3 |
| Tequila Sunrise | Build | Tequila 1 / Orange Juice 3 |
| Tequila Sour | Shaker | Tequila 3 / Lemon Juice 1 |
| Paloma | Build | Tequila 1.5 / Grapefruit Juice 3 / Soda Water 1.5 |
| Margarita | Shaker | Tequila 2 / Triple Sec 1 / Lime Juice 1 |
| Blue Margarita | Shaker | Tequila 2 / Blue Curacao 1 / Lime Juice 1 |
| Peach Margarita | Shaker | Tequila 2 / Peach 1 / Lime Juice 1 |
| Brandy and Soda | Build | Brandy 1 / Soda Water 3 |
| Brandy Sour | Shaker | Brandy 3 / Lemon Juice 1 |
| Sidecar | Shaker | Brandy 2 / Triple Sec 1 / Lemon Juice 1 |
| Blue Sidecar | Shaker | Brandy 2 / Blue Curacao 1 / Lemon Juice 1 |
| Fuzzy Navel | Build | Peach 1 / Orange Juice 3 |
| Peach Soda | Build | Peach 1 / Soda Water 3 |
| Peach Tonic | Build | Peach 1 / Tonic Water 3 |
| Reggae Punch | Shaker | Peach 1.5 / Orange Juice 2 / Cranberry Juice 2 |
| Blue Orange | Build | Blue Curacao 1 / Orange Juice 3 |
| Blue Tonic | Build | Blue Curacao 1 / Tonic Water 3 |
| China Blue | Build | Blue Curacao 1 / Grapefruit Juice 3 / Tonic Water 2 |
| Failed Cocktail | (no match) | None |
Adding a recipe
- Confirm the ingredient
idvalues exist inIngredientData.json. Add them if they do not. - Insert the new recipe in
RecipeData.jsonbefore the fallback recipe. - Put ingredient
idvalues and ratios iningredients. - Build
keyby sorting the ingredientidvalues and joining them with-. - Set
name.jpandname.en. - Set
methodtobuildorshaker. - Confirm SystemManager points at the JSON file you edited.
- Enter Play mode and check that the new name appears on the tablet and that making it scores correctly.
Checklist
If behavior does not match what you expect after editing JSON, check the following.
Ingredient or cocktail names do not appear
- JSON structure (arrays, commas, braces) is valid
idvalues in the ingredient JSON and recipe JSON match exactly- Both
name.jpandname.enare present
The result is Failed Cocktail
keymatches the sorted ingredientidvalues of what you actually poured, joined with-(not display names)- No extra ingredients were mixed in (that makes a different key and counts as a miss)
- The fallback recipe at the end was not deleted
Nothing pours when you tilt a bottle
- The cap is open (Use)
- The bottle's liquid particle reference is still assigned
- The
CocktailSystemPrefab (SystemManager) is in the scene